/**
 * axios 封装
 */
import axios from "axios";
import qs from 'qs'
import {
  Message,MessageBox,Loading
} from 'element-ui'
import store from '@/store/index.js'
// 创建一个 axios 实例
const service = axios.create({
  // withCredentials: true, // send cookies when cross-domain requests
  baseURL: process.env.VUE_APP_HOST, //'http://localhost:5050',//  
  timeout: 0, // 设定响应超时 5000
  showLoading: true,
});

/**
 * 请求拦截器
 * 每次请求前，如果存在token则在请求头中携带token，显示loading
 */
let loading = null

service.interceptors.request.use(config => {
  let paramsData = {};
  let token = store.getters.token; //
  // 在发送请求之前做些什么
  if(config.showLoading) {
    loading = Loading.service({
      text: '数据加载中...',
      spinner:"el-icon-loading",
      fullscreen: true, // 以服务的方式调用的全屏 Loading 是单例的：若在前一个全屏 Loading 关闭前再次调用全屏 Loading，并不会创建一个新的 Loading 实例，而是返回现有全屏 Loading 的实例：
      lock:true,
      background:"rgba(0, 0, 0, 0.8)",
    });
  }
  config.headers.token = token
  // console.log("request:", config);
  return config;
}, (error) => {
  loading && loading.close(); // 隐藏loading
  // 对请求错误做些什么
  console.log(error);
  return Promise.reject(error);
});

/**
 * 响应拦截器，
 * 每次响应的格式
 * { code => 状态码, msg => '响应信息', data => 数据 }
 */
service.interceptors.response.use((response) => {
  // console.log("response:", response);
  loading && loading.close(); // 隐藏loading
  const result = response.data; //注意后端返回的数据格式
  if (result.code === 200) { //注意返回的code值的含义  success ==== 0
  	return Promise.resolve(result); //返回成功
  }

  Message({
    message: result.msg || 'Error',
    type: 'error',
    duration: 5 * 1000
  });

  return Promise.reject(result)

}, (error) => {
  loading && loading.close(); // 隐藏loading
  //控制台错误提示
  console.error("响应拦截器错误:" + error); // for debug
  // 全局错误提示
  Message({
    message: error || 'Error',
    type: 'error',
    duration: 5 * 1000
  });
  return Promise.reject(error);
});


//默认引出
export default service;
